package br.ufpb.di.ppgi.apresentacao.controllers;

import org.springframework.transaction.annotation.Transactional;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.simtecnologia.access.controll.annotation.ControlledResource;
import br.com.simtecnologia.access.controll.role.Roles;
import br.ufpb.di.ppgi.negocio.ServiceLocator;
import br.ufpb.di.ppgi.negocio.iservicos.IUsuarioService;
import br.ufpb.di.ppgi.negocio.modelo.usuario.Usuario;
import br.ufpb.di.ppgi.negocio.modelo.usuario.UsuarioSessionInfo;
import br.ufpb.di.ppgi.negocio.servicos.login.Credencial;
import br.ufpb.di.ppgi.persistencia.transaction.TransactionScoped;
import br.ufpb.di.ppgi.util.security.Criptografia;

@Path("/admin/")
@ControlledResource
@Roles({"PROFESSOR","SECRETARIO"})
public class RootRestrictController extends AbstractController {
	
	private ServiceLocator serviceLocator;
	private UsuarioSessionInfo usuarioInfo;
	
	public RootRestrictController(Result result, Validator validator,
			ServiceLocator services, UsuarioSessionInfo usuarioInfo) {
		super(result, validator, services);
		
		this.serviceLocator = services;
		this.usuarioInfo = usuarioInfo;

	}
	
	@Get
	@Path("")
	public void index() {
	}
	
	@Path("alterarSenha")
	public void alterarSenha(){
		
	}
	
	@TransactionScoped
	@Path("alterandoSenha")
	public void alterandoSenha(String senhaAntiga, String novaSenha){
		
		Credencial antiga = new Credencial(usuarioInfo.getEmail(), senhaAntiga);
		Credencial nova = new Credencial(usuarioInfo.getEmail(), novaSenha);
		
		IUsuarioService usuarioService = serviceLocator.forUsuario();
		
		boolean alteradaComSucesso = usuarioService.alterarSenha(antiga, nova);
		usuarioService.atualizar( usuarioInfo.getUsuario() );
		
		result.include("alteradaComSucesso", alteradaComSucesso);
		
		if( alteradaComSucesso )
			result.redirectTo(this).index();
		
		else
			result.redirectTo(RootRestrictController.class).alterarSenha();
		
	}
	
}